IICS CDI Mapping Designer入門 〜Hierarchy Builder(階層ビルダ)編〜
どうも!DA部の春田です。
Informatica Cloud Data Integration(以下、IICS)でデータ変換処理を構築するためのインターフェイス"Mapping"には、データの変換処理を簡単に実装するための様々なパーツが用意されています。今回は非構造化データを扱う際に便利なパーツ、Hierarchy Builderについてご紹介していきます!
Hierarchy Builderでは何ができるのか?
Hierarchy Builderは、リレーショナルデータをJSONやXMLといった非構造化データに変換するためのパーツです。先日ご紹介したHierarchy Parserの逆ですね。Hierarchy Parserと同様、変換のためにHierarchy Schema(階層スキーマ)というデータ情報を定義しておく必要があります。
デザイナーの特徴的に、複数のSourceをInputに流してまとめてガッチャンコできる点が良い点ですね。
事前準備
IICSおよび、Secure Agentの環境は構築できているとします。初めての方は、以下のエントリをご参照ください。
今回も、Redshiftのサンプルデータを拝借します。tickitdb.zip
をダウンロードし、解凍したデータをSecure Agent内に配置してください。
IICSからFlat Fileとして読み取るコネクションを作成します。
これで事前準備はOKです!
実際に使ってみた!
まずは左メニューバーの「New」をクリックして、Mappingを新規作成します。
Mappingデザイナーの画面が表示されたら、Sourceの設定を行います。Object
にsales_tab.txt
を選択し、以下のようにFormatting Optionsを設定してください。
サンプルデータにはヘッダがないので、カラム名はFieldsタブから手入力してください。ついでにデータ型もいい感じに合わせておきましょう。
Sourceの設定が終わったら、デザイナー左のパレットからHierarchy Builderを選択し、SourceとTargetの間へドラッグ&ドロップします。
Hierarchy Builderのタブは複数ありますが、主に使用するのはOutput Settings
とField Mapping
の2つです。まずOutput Settings
でHierarchy Schemaの新規作成を行います。
設定画面が開いたら、Hierarchy Schemaの元となるサンプルデータをアップします。今回は以下のようなJSONデータを用意しました。
[{ "salesid": 9, "listid": 9, "userid": { "sellerid": 9, "buyerid": 9 }, "eventid": 9, "dateid": 9, "qtysold": 9, "pricepaid": 9, "commission": 9, "saletime": "X" }]
Validate
をクリックして問題なければ、保存してMappingの画面に戻ります。
作成したHierarchy Schemaを、Select
から選択します。
Hierarchy Schemaが更新されるとデザイナー上で矢印がリセットされてしまうので、再度Source
からHierarchy Builder
へ引っ張りましょう。
続いて、Field Mapping
タブをクリックします。ここでInputにきているテーブル情報と、先ほど指定したHierarchy Schemaに基づくJSONの構造が表示されます。紐づけたいカラム同士をドラッグ&ドロップでセッティングしていきます。
このような感じでマッピングできたら、出力データを確認してみます。Hierarchy BuilderはPreviewが使えないため、今回は実際にSecure Agentのローカルディレクトリへ出力してみます。まずはデザイナー上でHierarchy Builder
からTarget
へ矢印を引っ張ってきてください。
デザイナー上でTarget
をクリックし、出力の設定を行います。Target
のタブから使用するコネクションを選択した後、Select
で出力先を指定します。
今回は新規にファイルを作成するため、Create New at Runtime
を選択し、Static File Nameにoutput.json
と入力します。
Formatting Optionsは以下のように設定しておきます。2020年12月現在はJSONの出力形式の記載がありませんが、出力は可能です。
また、今回はヘッダは不要ですので、AdvancedでHeader OptionsをNo Header
としてください。
Targetの設定が完了したら、Mapping全体をSave
し、Run
から実行してみましょう。
ジョブが開始されるとこのようなアラートが表示されるので、クリックして成否を確認します。
ジョブの方は成功したみたいです。
肝心の出力データは、以下のような形式でした。外枠の[]
がついてしまっており、手元で検証してみた限りでは純粋なJSONLとはならないみたいですね。その点だけ、他のクライアントから読み込む際は注意が必要です。
[{"salesid":1,"listid":1,"userid":{"sellerid":36861,"buyerid":21191},"eventid":7872,"dateid":1875,"qtysold":4,"pricepaid":728,"commission":109.2,"saletime":"2008-02-18T02:36:48.000000000"}] [{"salesid":2,"listid":4,"userid":{"sellerid":8117,"buyerid":11498},"eventid":4337,"dateid":1983,"qtysold":2,"pricepaid":76,"commission":11.4,"saletime":"2008-06-06T05:00:16.000000000"}] [{"salesid":3,"listid":5,"userid":{"sellerid":1616,"buyerid":17433},"eventid":8647,"dateid":1983,"qtysold":2,"pricepaid":350,"commission":52.5,"saletime":"2008-06-06T08:26:17.000000000"}] [{"salesid":4,"listid":5,"userid":{"sellerid":1616,"buyerid":19715},"eventid":8647,"dateid":1986,"qtysold":1,"pricepaid":175,"commission":26.25,"saletime":"2008-06-09T08:38:52.000000000"}]
最後に
パパッとテーブルをJSONレコードに変換するにはちょうど良いパーツだな、という手応えでした。
Developers.IOではその他の機能についても丁寧にご紹介していきたいとおもいますので、乞うご期待ください!